<script>
    //  支付成功回调

            /*
                一、回调描述

                            用户使用普通支付功能  (APP支付/H5支付/JSAPI支付/Native支付/小程序支付)功能，当用户成功支付订单后，微信支付会通过POST的请求方式，

                            向用户预先设置的回调地址 (APP支付/H5支付/JSAPI支付/Native支付/小程序支付 下单接口传入的 notify_url) 发送回调通知，让商户知晓用户已经完成支付。

                
                        ★、注意：

                                商户侧对微信支付回到IP有防火墙策略限制的，需要对微信回调IP段开通白名单，
                                
                                否则会导致收不到回调 (微信支付回到被商户防火墙拦截)，

                                详情请参考：  回调处理逻辑注意事项 （https://pay.weixin.qq.com/doc/v3/merchant/4012075420#2.-%E5%9B%9E%E8%B0%83%E5%A4%84%E7%90%86%E9%80%BB%E8%BE%91%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9）

            */

            /*
                二、回调处理步骤

                         1、商户接收回调通知报文

                                    微信支付会通过POST的方式向回调地址发送回调报文，回调通知的请求主体中会包含JSON格式的通知参数，
                                    
                                    具体的通知参数列表如下：

                                            ①、id           必填       string(36)

                                                         【通知ID】回调通知的唯一编号。

                                            ②、create_time  必填        string(32)
                                                          
                                                         【通知创建时间】

                                                                1、定义：本次回调通知创建的时间。

                                                                2、格式：遵循rfc3339标准格式：
                                                                        yyyy-MM-DDTHH:mm:ss+TIMEZONE。
                                                                        yyyy-MM-DD 表示年月日；
                                                                        T 字符用于分隔日期和时间部分；
                                                                        HH:mm:ss 表示具体的时分秒；
                                                                        TIMEZONE 表示时区（例如，+08:00 对应东八区时间，即北京时间）。

                                                                3、示例：2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。


                                            ③、event_type   必填        string(32)

                                                        【通知的类型】微信支付回调通知的类型。

                                                                支付成功通知的类型为TRANSACTION.SUCCESS。

                                            ④、resource_type 必填       string(32)

                                                         【通知数据类型】
                                                         
                                                                通知的资源数据类型，固定为encrypt-resource。

                                            ⑤、resource     必填        object

                                                         【通知数据】通知资源数据。

                                                             ★、属性

                                                                    1、algorithm 必填 string(32)
                                                                            【加密算法类型】回调数据密文的加密算法类型，目前为AEAD_AES_256_GCM，开发者需要使用同样类型的数据进行解密。

                                                                    2、ciphertext 必填 string(1,1048576)
                                                                            【数据密文】Base64编码后的回调数据密文，商户需Base64解码并使用APIV3密钥解密，具体参考如何解密证书和回调报文。

                                                                    3、associated_data 选填 string(16)
                                                                             【附加数据】参与解密的附加数据，该字段可能为空。

                                                                    4、original_type 必填 string(16)
                                                                             【原始回调类型】加密前的对象类型，为transaction。
                                                                        
                                                                    5、nonce 必填 string(16)
                                                                             【随机串】参与解密的随机6串。

                                            ⑥、summary      必填       string(64)
                                                                    【回调摘要】微信支付对回调内容的摘要备注。
            */

           /*
                三、回调"验签" 与 "应答"

                                    商户接收到回调通知报文后，需在 "5秒内" 完成对报文的验签，并 "应答回调通知"。

                                1、对回调通知进行验签

                                                    回调报文的HTTP请求头中会包含报文的签名信息，用于验签，具体如下：

                                                                    参数                            描述
                                                                ①、Wechatpay-Serial             验签的微信支付平台证书序列号/微信支付公钥ID

                                                                ②、Wechatpay-Signature          验签的签名值

                                                                ③、Wechatpay-Timestamp          验签的时间戳

                                                                ④、Wechatpay-Nonce              验签的随机字符串

                                                    验签需要使用请求头中的 [Wechatpay-Timestamp]、[Wechatpay-Nonce] 以及请求体中JSON格式的通知参数构建出 "验签串"，

                                                    然后使用 [WeChatpay-Serial] 对应的 "微信支付平台证书/微信支付公钥" 对验签串 和 [Wechatpay-Singnature] 进行验签，确保接收的回到内容是来自微信支付。


                                                    商户可通过HTTP头 "Wechagpay-Serial" 中的证书序列号判断选择对应的证书验签，微信支付公钥的序列号固定采用 "PUB_KEY_ID_数字串" 格式 (例如：PUB_KEY_ID_3000000001）,

                                                    若请求头中的序列号不符合该格式，则应使用平台证书进行验签。

                                                    详细验签步骤请参考：  如何验证签名 (https://pay.weixin.qq.com/doc/v3/merchant/4012365342#2.-%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E9%9C%80%E8%A6%81%E9%AA%8C%E7%AD%BE%EF%BC%9F%E5%A6%82%E4%BD%95%E9%AA%8C%E7%AD%BE%EF%BC%9F)

                                                    微信支付会在极少数通知回调中返回已 "WECHATPAY/SIGNTEST/" 开头的错误 [Wechatpay-Signature],以检测商户系统是否正确验证签名。

                                                    商户请参考： "如何应对签名探测流量 （https://pay.weixin.qq.com/doc/v3/merchant/4013053249#%EF%BC%881%EF%BC%89%E8%AF%B7%E5%90%88%E7%90%86%E5%BA%94%E5%AF%B9%E7%AD%BE%E5%90%8D%E6%8E%A2%E6%B5%8B%E6%B5%81%E9%87%8F）"
                                                    
                                                                进行处理。

                                                    ★、签名探测流量HTTP头中的 Wechatpay-Signature示例：
                                                    
                                                                WECHATPAY/SIGNTEST/c0k+ZP6cSbveFpn0U5Bhq1Evz0A0rmmhGyuFXGqAtrlspDr3wrmaeauXJT6YYD4OmnDi767TImhRdV9hdmU0T5ZVfkOB/zka3mYthkxJ9V6UMoI
                                                                4QLGogSG1mnYjZGa6zGy1+8WInqosp0+6eBJuul55xwf3oEIpNMxAl4NL0QHr5nLfB0b0PZQSU9rZneOtDjdNtDCGEtcwV6H1eTdLpFrw2wCtiWJDw6tQwR1IfGVtdE4FK
                                                                JQvYmOT7udgR6XfLdvzwbJsifpxvuG9q23OQF1i4PndT7AP8ykhKUEZayTrYGWdobrljFh2nu9Ng7divjg==


                                2、对回调进行相应(应答)

                                                    商户验签后，根据验签结果对回调进行应答：

                                                        <1>、验签通过：  
                                                                
                                                                    商户需告知微信支付接收回调成功，HTTP应答状态码需返回200或204，无需返回应答报文。

                                                        <2>、验签不通过： 
                                                            
                                                                    商户需告知微信支付接收回调失败，HTTP应答状态码需返回5XX或4XX，同时需返回以下应答报文：

                                                    
                                                        ★、验签成功响应报文示例：

                                                                    200 或 204

                                                                    无应答包体

                                                        ★、验签失败响应示例：

                                                                    5XX或4XX

                                                                    {  
                                                                        "code": "FAIL",
                                                                        "message": "失败"
                                                                    }

                                3、微信支付回到你处理机制说明

                                                    微信支付接受到商户的应答后，会根据应答结果做对应的逻辑处理：

                                                    <1>、若商户应答回调接受成功，微信支付将不再重复发送该回调通知。若因网络或其他原因，商户收到了重复的回调通知，请按正常流程进行处理并响应(应答)。

                                                    <2>、若商户应答回调接受失败，或超时(5s)未应答，微信回按照 (15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h/6h/10h) 的频次重复发送回调通知，

                                                         直至接受到商户应答成功，或达到最大发送次数 (15次)
           */

          /*
                四、对回调通知内容进行解密

                                为了保证业务信息的安全性，微信支付将业务信息进行了 AES-256-GCM加密，

                                并通过 参数 resource 将加密信息回调给商户，商户需要进行解密后才能获取到业务信息。

                                1、解密步骤如下：

                                            ①、获取商户平台上设置的 APIv3密钥，设置 APIv3密钥可参考文档： APIv3密钥设置方法（https://kf.qq.com/faq/180830E36vyQ180830AZFZvu.html）

                                            ②、通过回调通知参数resource.algorithm确认加密算法（目前仅支持AEAD_AES_256_GCM，算法的接口细节，请参考：rfc5116 (https://datatracker.ietf.org/doc/html/rfc5116)）。

                                            ③、使用APIv3密钥与回调通知参数resource.nonce和resource.associated_data，对数据密文resource.ciphertext进行解密，最终可得到JSON格式的业务信息。、

                                            ★、解密示例代码可参考文档：  
                                                    
                                                        如何解密回调报文 (https://pay.weixin.qq.com/doc/v3/merchant/4012071382)

                                            ★、注意：

                                                        使用Java进行回调解密，取JSON串内的参数值时，只需取引号内的内容进行解密。例："nonce":"123"，只需取值123，不用取加上引号的"123"。

                                2、解密后的字段  (resource 中 ciphertext 解密后的字段)

                                           ①、appid 必填 string(32)
                                                        【公众账号ID】商户下单时传入的公众账号ID。
                                                    
                                           ②、mchid 必填 string(32)
                                                        【商户号】商户下单时传入的商户号。

                                           ③、out_trade_no 必填 string(32)
                                                        【商户订单号】商户下单时传入的商户系统内部订单号。

                                           ④、transaction_id 必填 string(32)
                                                        【微信支付订单号】 微信支付侧订单的唯一标识。

                                           ⑤、trade_type 必填 string(16)
                                                        【交易类型】 返回当前订单的交易类型，
                                                        
                                                        枚举值：

                                                                JSAPI：公众号支付、小程序支付
                                                                NATIVE：Native支付
                                                                APP：APP支付
                                                                MICROPAY：付款码支付
                                                                MWEB：H5支付
                                                                FACEPAY：刷脸支付

                                           ⑥、trade_state 必填 string(32)
                                                        【交易状态】 交易状态，详细业务流转状态处理请参考开发指引-订单状态流转图。

                                                        枚举值：

                                                                SUCCESS：支付成功
                                                                REFUND：转入退款
                                                                NOTPAY：未支付
                                                                CLOSED：已关闭
                                                                REVOKED：已撤销（仅付款码支付会返回）
                                                                USERPAYING：用户支付中（仅付款码支付会返回）
                                                                PAYERROR：支付失败（仅付款码支付会返回）


                                           ⑦、trade_state_desc 必填 string(256)
                                                        【交易状态描述】 对交易状态的详细说明。


                                           ⑧、bank_type 必填 string(32)
                                                        【银行类型】 用户支付方式说明，订单支付成功后返回，
                                                        格式为：银行简码_具体类型(DEBIT借记卡/CREDIT信用卡/ECNY数字人民币)，
                                                        例如ICBC_DEBIT代表工商银行借记卡，非银行卡支付类型(例如余额/零钱通等)统一为OTHERS，具体请参考《银行类型对照表》。

                                           ⑨、attach 选填 string(128)
                                                        【商户数据包】商户下单时传入的自定义数据包，用户不可见，长度不超过128字符，若下单传入该参数，
                                                         则订单支付成功后此接口和查询订单接口以及交易账单中会原样返回；若下单未传该参数，则不会返回。

                                           ⑩、success_time 必填 string(64)
                                                        【支付完成时间】
                                                            1、定义：用户完成订单支付的时间。

                                                            2、格式：遵循rfc3339标准格式：yyyy-MM-DDTHH:mm:ss+TIMEZONE。
                                                                yyyy-MM-DD 表示年月日；T 字符用于分隔日期和时间部分；
                                                                HH:mm:ss 表示具体的时分秒；TIMEZONE 表示时区（例如，+08:00 对应东八区时间，即北京时间）。

                                                            示例：2015-05-20T13:29:35+08:00 表示北京时间2015年5月20日13点29分35秒。

                                           ⑫、payer 必填 object
                                                        【支付者信息】 订单的支付者信息。

                                                         ★、属性
                                                                openid 必填 string(128)

                                                               【用户标识】用户在商户下单的appid下唯一标识。
                                                               
                                           ⑬、amount 必填 object
                                                        【订单金额】 订单金额信息，当支付成功时返回该字段。
                                                        ★、属性：

                                                                1、total 必填 int
                                                                        【总金额】 订单总金额，单位为分，整型。   
                                                                        
                                                                2、payer_total 必填 int
                                                                        【用户支付金额】用户支付金额，整型，单位为分。（指使用优惠券的情况下，这里等于总金额-优惠券金额）

                                                                3、currency 必填 string(16)
                                                                        【货币类型】固定返回：CNY，代表人民币。

                                                                4、payer_currency 必填 string(16)
                                                                        【用户支付币种】 固定返回：CNY，代表人民币

                                           ⑭、scene_info 选填 object
                                                        【场景信息】 若下单传入该参数，则原样返回；若下单未传该参数，则不会返回。
                                                        ★、属性：
                                                                device_id 必填 string(32)
                                                                【商户端设备号】 商户下单时传入的商户端设备号（门店号或收银设备ID）。

                                           ⑮、promotion_detail 　选填   array[object]

                                            【优惠功能】 代金券信息，当订单有使用代金券时，该字段将返回所使用的代金券信息

                                                ★、属性：

                                                        1、coupon_id 　必填  string(32)
                                                                        【券ID】 代金券id，微信为代金券分配的唯一标识，创券商户调用发放指定批次的代金券时返回的代金券ID coupon_id。

                                                        2、name 　必填   string(64)

                                                                        【优惠名称】 优惠名称，创券商户创建代金券批次时传入的批次名称stock_name。

                                                                        "创建代金券批次"（https://pay.weixin.qq.com/doc/v3/merchant/4012534633）

                                                        3、scope 　选填  string(32)

                                                                        【优惠范围】优惠活动中代金券的适用范围，分为两种类型：

                                                                                ①、GLOBAL：全场代金券-以订单整体可优惠的金额为优惠门槛的代金券；

                                                                                ②、SINGLE：单品优惠-以订单中具体某个单品的总金额为优惠门槛的代金券

                                                        4、type 　选填  string(32)

                                                                        【优惠类型】代金券资金类型，优惠活动中代金券的结算资金类型，分为两种类型：

                                                                                ①、CASH：预充值-带有结算资金的代金券，会随订单结算给订单收款商户；

                                                                                ①、NOCASH：免充值-不带有结算资金的代金券，无资金结算给订单收款商户；

                                                        5、 amount 　必填   integer

                                                                        【优惠券面额】代金券优惠的金额。

                                                        6、stock_id 　选填   string(32)

                                                                        【活动ID】单张代金券所对应的批次号

                                                        7、wechatpay_contribute 　选填   integer

                                                                        【微信出资】 代金券有三种出资类型： 微信出资、商户出资、其他出资。

                                                                        本参数将返回选择 "微信出资类型" 时的优惠券面额。

                                                                        ①、创建代金券后默认为 "商户出资类型" 。如需要使用其他两种类型，请与相关行业运营进行沟通。

                                                                        ②、在 wechatpate_contribute 、merchant_contribute、other_contribute 这三个字段中，仅有一个字段会返回出资金额。

                                                                        具体返回哪个字段取决于代金券批次的配置。

                                                        8、merchant_contribute 　选填   integer
                                                        
                                                                        【商户出资】代金券有三种出资类型：微信出资、商户出资和其他出资。
                                                                        
                                                                        本参数将返回选择“商户出资类型”时的优惠券面额。
                                                                        
                                                                                ①、创建代金券后默认为商户出资类型。如需使用其他两种类型，请与相关行业运营进行沟通。

                                                                                ②、在 wechatpay_contribute、merchant_contribute 和 other_contribute 这三个字段中，仅有一个字段会返回出资金额。
                                                                                
                                                                                        具体返回哪个字段取决于代金券批次的配置。

                                                        9、other_contribute 　选填   integer

                                                                        【其他出资】代金券有三种出资类型：微信出资、商户出资和其他出资。

                                                                        本参数将返回选择“其他出资类型”时的优惠券面额。

                                                                                1、创建代金券后默认为商户出资类型。如需使用其他两种类型，请与相关行业运营进行沟通。

                                                                                2、在 wechatpay_contribute、merchant_contribute 和 other_contribute 这三个字段中，仅有一个字段会返回出资金额。
                                                                                
                                                                                        具体返回哪个字段取决于代金券批次的配置。

                                                        10、currency 　选填   string(16)

                                                                        【优惠币种】 代金券金额所对应的货币种类：固定为：CNY，人民币。


                                                        11、 goods_detail 　选填   array[object]
                                                                        【单品列表】 单品列表。scope为SINGLE（单品优惠）时返回该参数
                                                                        ★、属性：
                                                                                ①、goods_id 　必填   string(32)
                                                                                        【商品编码】 商品编码。
                                                                                ②、quantity 　必填   integer
                                                                                        【商品数量】 商品数量。
                                                                                ③、unit_price 　必填   integer
                                                                                        【商品单价】 商品单价，单位为分。
                                                                                ④、discount_amount 　必填   integer
                                                                                        【商品优惠金额】 商品优惠金额。
                                                                                ⑤、goods_remark 　选填   string(128)
                                                                                        【商品备注】创券商户在商户平台创建单品券时，若设置了商品备注则会返回。



                                            

                                
          */
</script>